// components/payment-password/index.js
Component({
  properties: {
    show: {
      type: Boolean,
      value: false
    },
    title: {
      type: String,
      value: '请输入支付密码'
    },
    amount: {
      type: String,
      value: '0.00'
    }
  },

  data: {
    password: '',
    loading: false,
    isFocus: false
  },

  lifetimes: {
    attached() {
      // 组件初始化时检查是否已设置支付密码
      this.checkPasswordStatus()
    }
  },

  observers: {
    'show': function(show) {
      if (show) {
        // 每次显示时都检查密码状态
        this.checkPasswordStatus()
      }
    }
  },

  methods: {
    // 检查支付密码设置状态
    async checkPasswordStatus() {
      if (!this.data.show) return
      
      try {
        const result = await wx.cloud.callFunction({
          name: 'verifyPaymentPassword',
          data: {
            checkOnly: true // 只检查是否设置了密码，不验证具体密码
          }
        })
        
        if (result.result.code === 'NO_PASSWORD_SET') {
          // 未设置支付密码，直接引导用户设置
          wx.showModal({
            title: '提示',
            content: '您还未设置支付密码，请先设置支付密码后再进行支付',
            confirmText: '去设置',
            cancelText: '取消',
            showCancel: true,
            success: (res) => {
              if (res.confirm) {
                // 关闭当前弹窗并触发设置密码事件
                this.triggerEvent('close')
                this.triggerEvent('setPassword')
              } else {
                this.triggerEvent('close')
              }
            }
          })
        }
      } catch (error) {
        console.error('检查支付密码状态失败:', error)
      }
    },
    // 获取焦点
    getFocus() {
      this.setData({
        isFocus: true
      })
    },

    // 输入密码
    onPasswordInput(e) {
      const value = e.detail.value
      const password = value.replace(/[^0-9]/g, '').slice(0, 6)
      
      this.setData({
        password
      })
      
      // 如果输入了6位密码，自动验证
      if (password.length === 6) {
        this.setData({
          isFocus: false
        })
        this.verifyPassword()
      }
    },

    // 验证密码
    async verifyPassword() {
      if (this.data.loading) return
      
      this.setData({ loading: true })
      
      try {
        const result = await wx.cloud.callFunction({
          name: 'verifyPaymentPassword',
          data: {
            password: this.data.password
          }
        })
        
        if (result.result.success) {
          // 密码正确
          this.triggerEvent('success', {
            password: this.data.password
          })
          this.resetPassword()
        } else {
          // 检查是否未设置支付密码
          if (result.result.code === 'NO_PASSWORD_SET' || result.result.needSetPassword) {
            // 未设置支付密码，引导用户设置
            wx.showModal({
              title: '提示',
              content: '您还未设置支付密码，是否立即设置？',
              confirmText: '去设置',
              cancelText: '取消',
              success: (res) => {
                if (res.confirm) {
                  // 关闭当前弹窗并触发设置密码事件
                  this.triggerEvent('close')
                  this.triggerEvent('setPassword')
                } else {
                  this.resetPassword()
                }
              }
            })
          } else {
            // 密码错误
            wx.showToast({
              title: result.result.message || '支付密码错误',
              icon: 'none'
            })
            this.resetPassword()
          }
        }
      } catch (error) {
        console.error('验证支付密码失败:', error)
        wx.showToast({
          title: '验证失败，请重试',
          icon: 'none'
        })
        this.resetPassword()
      } finally {
        this.setData({ loading: false })
      }
    },

    // 重置密码输入
    // 重置密码输入
    resetPassword() {
      this.setData({
        password: '',
        isFocus: true
      })
    },

    // 关闭弹窗
    onClose() {
      this.resetPassword()
      this.triggerEvent('close')
    },

    // 忘记密码
    // 未设置密码
    // 未设置密码
    async onNoPassword() {
      // 先检查用户是否真的未设置密码
      try {
        wx.showLoading({
          title: '检查中...',
          mask: true
        })

        const result = await wx.cloud.callFunction({
          name: 'verifyPaymentPassword',
          data: {
            checkOnly: true
          }
        })

        wx.hideLoading()

        if (result.result.code === 'NO_PASSWORD_SET') {
          // 确实未设置密码，允许跳转
          this.triggerEvent('close')
          this.triggerEvent('setPassword')
        } else {
          // 已设置密码，不允许跳过验证
          wx.showModal({
            title: '提示',
            content: '检测到您已设置支付密码，请输入密码进行验证。如忘记密码，请点击"忘记密码？"',
            showCancel: false,
            confirmText: '知道了'
          })
        }
      } catch (error) {
        wx.hideLoading()
        console.error('检查密码状态失败:', error)
        wx.showToast({
          title: '检查失败，请重试',
          icon: 'none'
        })
      }
    },

    // 忘记密码
    onForgetPassword() {
      this.triggerEvent('forget')
    },

    // 阻止事件冒泡
    preventTap() {}
  }
})